# 使用元类
# type()：可以查看一个类型或变量的类型，type()函数既可以返回一个对象的类型，又可以创建出新的类型
# 要创建一个class对象，type()函数依次传入3个参数：
# 1、class的名称
# 2、继承的父类集合，如果只有一个父类，别忘了tuple的单元素写法
# 3、class的方法名称与函数绑定

# metaclass 元类:除了使用type()动态创建类以外，要控制类的创建行为，还可以使用metaclass。
# 先定义metaclass，就可以创建类，最后创建实例。
# metaclass是类的模板，所以必须从“type”类型派生
class ListMetaclass(type):# metaclass是创建类，所以必须从`type`类型派生：
    def __new__(cls, name, bases, attrs):
        attrs['add'] = lambda self, value: self.append(value)
        return type.__new__(cls, name, bases, attrs)
class MyList(list, metaclass=ListMetaclass):# 指示使用ListMetaclass来定制类
    pass
L = MyList()
L.add(1)
L.add(2)
L.add('End')
print(L)
